package com.xiaoquan.gulimall.product.feign;

import com.xiaoquan.common.to.SkuReductionTo;
import com.xiaoquan.common.to.SpuBoundTo;
import com.xiaoquan.common.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

@FeignClient("gulimall-coupon")  // 1、调用优惠券信息 服务
public interface CouponFeignService {
    // TODO 远程调用过程  是根据服务名来调用的
    /**
     * 开始调用这个方法CouponFeignService.saveSpuBounds(spuBoundTo);
     *  1、@RequestBody注解 将要传递 数据的对象 转为 json
     *  2、三步骤 找到 gulimall-coupon服务，将json放在请求体位置
     *       给 /coupon/spubounds/save 发送请求。
     *  3、对方服务（被调用者 也就是优惠券服务）接收到请求。 接收 请求体里的json数据。
     *      @RequestBody SpuBoundsEntity spuBounds; 将请求体中的 json数据 转为 SpuBoundsEntity对象;
     *          只要json数据模型是兼容的。双方服务无需使用同一个 to(对象名)
     *
     *   为了方便 直接全部复制方法签名 即可 所以基本上 调用者 和 被调用者 中的 方法名和括号里面的对象名 基本一样
     * @param spuBoundTo
     * @return
     */

    // 保存时Post请求
    @PostMapping("/coupon/spubounds/save")  // 要写 调用服务的完整路劲  2、找到接口在那个controller
    R saveSpuBounds(@RequestBody SpuBoundTo spuBoundTo);  // 3、找到那个方法

    @PostMapping("/coupon/skufullreduction/saveInfo")
    R saveSkuReduction(@RequestBody SkuReductionTo skuReductionTo);  // 所有的方法都是返回R
}
